/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.inf.ufg.model;

import br.inf.ufg.factory.ConexaoFactoryMySql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
/**
 *
 * @author umarley.faria
 */
public class PontoVendasDAO {
    
    private final Connection con;
    private final Statement stmt;
    private final Statement stmtNavegar;
    private ResultSet rsNavegar;
    
    public PontoVendasDAO() throws ClassNotFoundException, SQLException{        
         
             con = ConexaoFactoryMySql.getConnection();
             stmt = con.createStatement();
             stmtNavegar = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_UPDATABLE );
             rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM pontovendas" );
    
    }
    
    public PontoVendas primeiro() throws SQLException 
    {
        if (rsNavegar.first() ) 
        {            
            PontoVendas ponto = new PontoVendas();
            
            ponto.setIdPonto(rsNavegar.getInt( "IDPONTO" ) );
            ponto.setRazaoSocial(rsNavegar.getString( "RAZAOSOCIAL" ) );
            ponto.setNomeFantasia(rsNavegar.getString("NOMEFANTASIA"));
            ponto.setCfpCnpj(rsNavegar.getString("CPF_CNPJ"));
            
            ponto.setCep(rsNavegar.getString("CEP"));
            ponto.setRua(rsNavegar.getString("RUA"));
            ponto.setComplemento(rsNavegar.getString("COMPLEMENTO"));
            ponto.setBairro( rsNavegar.getString("BAIRRO"));
            
            ponto.setCidade(rsNavegar.getString("CIDADE"));
            ponto.setEstado(rsNavegar.getString("ESTADO"));
            ponto.setIsAtivo(rsNavegar.getInt("IS_ATIVO"));

            return ponto;

        }
        else 
        {
            return null;
        }
        
    }
    
    public PontoVendas anterior() throws SQLException 
    {
        
        if ( ! rsNavegar.isFirst() ) 
        {
            rsNavegar.previous();
            PontoVendas ponto = new PontoVendas();
            ponto.setIdPonto(rsNavegar.getInt( "IDPONTO" ) );
            ponto.setRazaoSocial(rsNavegar.getString( "RAZAOSOCIAL" ) );
            ponto.setNomeFantasia(rsNavegar.getString("NOMEFANTASIA"));
            ponto.setCfpCnpj(rsNavegar.getString("CPF_CNPJ"));
            ponto.setCep(rsNavegar.getString("CEP"));
            ponto.setRua(rsNavegar.getString("RUA"));
            ponto.setComplemento(rsNavegar.getString("COMPLEMENTO"));
            ponto.setCidade(rsNavegar.getString("CIDADE"));
            ponto.setEstado(rsNavegar.getString("ESTADO"));
            ponto.setIsAtivo(rsNavegar.getInt("IS_ATIVO"));
            return ponto; 

        } 
        else 
        {
            return null;
        }
    }
    
    
    public PontoVendas proximo() throws SQLException 
    {
     
        if ( ! rsNavegar.isLast() ) 
        { 
            rsNavegar.next();                
            PontoVendas ponto = new PontoVendas();
            ponto.setIdPonto(rsNavegar.getInt( "IDPONTO" ) );
            
            ponto.setRazaoSocial(rsNavegar.getString( "RAZAOSOCIAL" ) );
            ponto.setNomeFantasia(rsNavegar.getString("NOMEFANTASIA"));
            ponto.setCfpCnpj(rsNavegar.getString("CPF_CNPJ"));
            
            ponto.setCep(rsNavegar.getString("CEP"));
            ponto.setRua(rsNavegar.getString("RUA"));
            ponto.setBairro(rsNavegar.getString("BAIRRO"));
            
            ponto.setComplemento(rsNavegar.getString("COMPLEMENTO"));
            ponto.setCidade(rsNavegar.getString("CIDADE"));
            ponto.setEstado(rsNavegar.getString("ESTADO"));
            ponto.setIsAtivo(rsNavegar.getInt("IS_ATIVO"));
            return ponto; 

        } 
        else 
        {
            return null;
        }
        
     }

     
     
      public PontoVendas ultimo() throws SQLException 
      {
           
            if ( rsNavegar.last() ) 
            {               
                PontoVendas ponto = new PontoVendas();
                ponto.setIdPonto(rsNavegar.getInt( "IDPONTO" ) );

                ponto.setRazaoSocial(rsNavegar.getString( "RAZAOSOCIAL" ) );
                ponto.setNomeFantasia(rsNavegar.getString("NOMEFANTASIA"));
                ponto.setCfpCnpj(rsNavegar.getString("CPF_CNPJ"));

                ponto.setCep(rsNavegar.getString("CEP"));
                ponto.setRua(rsNavegar.getString("RUA"));
                ponto.setComplemento(rsNavegar.getString("COMPLEMENTO"));
                ponto.setBairro(rsNavegar.getString("BAIRRO"));


                ponto.setCidade(rsNavegar.getString("CIDADE"));
                ponto.setEstado(rsNavegar.getString("ESTADO"));
                ponto.setIsAtivo(rsNavegar.getInt("IS_ATIVO"));


                return ponto;                 
            }
            else
            {
                return null;
            }  
            
      }
      
      
      public PontoVendas pesquisarAssento( String param ) throws SQLException
      {               

            ResultSet rs = stmt.executeQuery( "SELECT * FROM pontovendas WHERE IDPONTO = " + param + " OR CPF_CNPJ LIKE '%"+ param +"%'" );
            
            if ( rs.next() ) 
            {      
                PontoVendas ponto = new PontoVendas();
                
                ponto.setIdPonto(rsNavegar.getInt( "IDPONTO" ) );
                ponto.setRazaoSocial(rsNavegar.getString( "RAZAOSOCIAL" ) );
                ponto.setNomeFantasia(rsNavegar.getString("NOMEFANTASIA"));
                ponto.setCfpCnpj(rsNavegar.getString("CPF_CNPJ"));
                ponto.setCep(rsNavegar.getString("CEP"));
                ponto.setRua(rsNavegar.getString("RUA"));
                ponto.setBairro(rsNavegar.getString("BAIRRO"));
                ponto.setComplemento(rsNavegar.getString("COMPLEMENTO"));
                ponto.setCidade(rsNavegar.getString("CIDADE"));
                ponto.setEstado(rsNavegar.getString("ESTADO"));
                ponto.setIsAtivo(rsNavegar.getInt("IS_ATIVO"));
                return ponto;                 
            } 
            else 
            {
                return null;
            } 
      }
      
      public boolean excluirRegistro( PontoVendas ponto ) throws SQLException 
      {
            int codPonto = ponto.getIdPonto(); 
          
            stmt.executeUpdate( "DELETE FROM pontovendas WHERE IDPONTO = " + codPonto );
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM pontovendas" );
            return true;        
      }
      
      // # salva um novo registro de ponto de vendas na base de dados 
      public boolean salvarRegistro( PontoVendas ponto ) throws SQLException, Exception
      {    
            
          // # resgatar os valores das variaveis 
          
          String razaoSocial    = ponto.getRazaoSocial(); 
          String nomeFantasia   = ponto.getNomeFantasia();
          String cpfCnpj        = ponto.getCfpCnpj(); 
          String cep            = ponto.getCep(); 
          String rua            = ponto.getRua(); 
          String complemento    = ponto.getComplemento();
          String cidade         = ponto.getCidade();
          String estado         = ponto.getEstado(); 
          String bairro         = ponto.getBairro(); 
          int status            = ponto.getIsAtivo(); 
          
            try  
            {
                // # SQL de insercao 
                
                String SQL = "INSERT INTO `pontovendas` (`RAZAOSOCIAL`,`NOMEFANTASIA`,`CPF_CNPJ`,`CEP`,`RUA`,`COMPLEMENTO`,`CIDADE`,`ESTADO`,`IS_ATIVO`,`BAIRRO`) "
                        + " VALUES ('"+razaoSocial+"', '"+nomeFantasia+"', '"+cpfCnpj+"', '"+cep+"', '"+rua+"', '"+complemento+"', '"+cidade+"', '"+estado+"', '"+status+"', '"+bairro+"')";
                        
                stmt.executeUpdate( SQL );
                rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM `pontovendas`" );
                
                return true;
            }
            catch ( SQLException e) 
            {
                throw new Exception("Erro ao inserir dados. Tente novamente " + e.getMessage());

            }
          
      }
      
       public boolean atualizarRegistro( PontoVendas ponto ) throws SQLException, Exception
       {
          
            // # resgatar os valores das variaveis 
          
            int codPonto          = ponto.getIdPonto();
            String razaoSocial    = ponto.getRazaoSocial(); 
            String nomeFantasia   = ponto.getNomeFantasia();
            String cpfCnpj        = ponto.getCfpCnpj(); 
            String cep            = ponto.getCep(); 
            String rua            = ponto.getRua(); 
            String complemento    = ponto.getComplemento();
            String cidade         = ponto.getCidade();
            String estado         = ponto.getEstado(); 
            String bairro         = ponto.getBairro(); 
            int status            = ponto.getIsAtivo(); 
            
            try 
            {
                
                // # sql de atualizacao do registro 
                  // # SQL de insercao 
                
                String SQL = "UPDATE `pontovendas` SET RAZAOSOCIAL = '"+razaoSocial+"', NOMEFANTASIA = '"+nomeFantasia+"', CPF_CNPJ = '"+cpfCnpj+"', CEP = '"+cep+"'"
                        + " , RUA = '"+rua+"', COMPLEMENTO = '"+complemento+"', CIDADE = '"+cidade+"', ESTADO = '"+estado+"', BAIRRO = '"+bairro+"', IS_ATIVO = '"+status+"'  WHERE IDPONTO = '"+codPonto+"' ";
                
                stmt.execute( SQL );
                rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM pontovendas" );
                return true;

            }
            catch ( SQLException e) 
            {
                throw new Exception("Erro ao atualizar dados. Tente novamente " + e.getMessage());

            }
          
      }
       
        public PontoVendas pesquisarPontoVenda( String param ) throws SQLException
        {               

              ResultSet rs = stmt.executeQuery( "SELECT * FROM pontovendas WHERE NOMEFANTASIA LIKE '%"+ param +"%'" );
              
              if ( rs.next() ) 
              {      
                    PontoVendas ponto = new PontoVendas();
                
                    ponto.setIdPonto( rs.getInt( "IDPONTO" ) );
                    ponto.setRazaoSocial( rs.getString( "RAZAOSOCIAL" ) );
                    ponto.setNomeFantasia( rs.getString("NOMEFANTASIA") );
                    ponto.setCfpCnpj( rs.getString("CPF_CNPJ") );
                    ponto.setCep( rs.getString("CEP") );
                    ponto.setRua( rs.getString("RUA") );
                    ponto.setBairro( rs.getString("BAIRRO") );
                    ponto.setComplemento( rs.getString("COMPLEMENTO") );
                    ponto.setCidade( rs.getString("CIDADE") );
                    ponto.setEstado( rs.getString("ESTADO") );
                    ponto.setIsAtivo( rs.getInt("IS_ATIVO") );

                    return ponto;                                 
              }
              else 
              {
                  return null;
              } 
      }
      
      public PontoVendas getPontoVenda(int codigo ) throws SQLException
      {
          
            ResultSet rs = stmt.executeQuery( "SELECT * FROM pontovendas WHERE IDPONTO = "+ codigo  );

            if ( rs.next() ) 
            {      
                PontoVendas ponto = new PontoVendas();
                
                ponto.setIdPonto( rs.getInt( "IDPONTO" ) );
                ponto.setRazaoSocial( rs.getString( "RAZAOSOCIAL" ) );
                ponto.setNomeFantasia( rs.getString("NOMEFANTASIA") );
                ponto.setCfpCnpj( rs.getString("CPF_CNPJ") );
                ponto.setCep( rs.getString("CEP") );
                ponto.setRua( rs.getString("RUA") );
                ponto.setBairro( rs.getString("BAIRRO") );
                ponto.setComplemento( rs.getString("COMPLEMENTO") );
                ponto.setCidade( rs.getString("CIDADE") );
                ponto.setEstado( rs.getString("ESTADO") );
                ponto.setIsAtivo( rs.getInt("IS_ATIVO") );
                
                return ponto;                 
                
            }
            else 
            {
                return null;
            } 
          
      }
      
      public ArrayList<PontoVendas> ListarPontoVendas() throws SQLException 
      {
          
          Statement stmtListar = con.createStatement();
          ResultSet rs = stmtListar.executeQuery( "SELECT * FROM pontovendas WHERE IS_ATIVO = 1");
          
          ArrayList<PontoVendas> retorno = new ArrayList<PontoVendas>();
            
            while ( rs.next() ) 
            {
                PontoVendas ponto = new PontoVendas();
                
                ponto.setIdPonto( rs.getInt( "IDPONTO" ) );
                ponto.setRazaoSocial( rs.getString( "RAZAOSOCIAL" ) );
                ponto.setNomeFantasia( rs.getString("NOMEFANTASIA") );
                ponto.setCfpCnpj( rs.getString("CPF_CNPJ") );
                ponto.setCep( rs.getString("CEP") );
                ponto.setRua( rs.getString("RUA") );
                ponto.setBairro( rs.getString("BAIRRO") );
                ponto.setComplemento( rs.getString("COMPLEMENTO") );
                ponto.setCidade( rs.getString("CIDADE") );
                ponto.setEstado( rs.getString("ESTADO") );
                ponto.setIsAtivo( rs.getInt("IS_ATIVO") );
                
                retorno.add( ponto );
            }
            
            return retorno;
      }
      
    
    
}
